/**
 *
 * 1. 数组去重
 *   array.from(new Set())
 *   reduce
 *
 * 2. 深拷贝
 *    复制当前的数据，更改复制后的数据，不会影响原有的数据
 *   
 *
*/
// JSON.parse(JSON.stringif()) 正则对象

// function deepClone(target) {
//   let result;
//   if (typeof target === 'object') {
//     // 数组 对象  正则  null
//     if (Array.isArray(target)) {
//       result = []
//       for (let i in target) {
//         result.push(deepClone(target[i]))
//       }
//     } else if (target === null) {
//       result = target;
//     } else if (target.contructor === RegExp) {
//       result = target;
//     } else {
//       // {}
//       result = {}
//       for (let i in target) {
//         result[i] = target[i]
//       }
//     }
//   } else {
//     result = target;
//   }
//   return result;
// }


function deepClone(target) {
  let result;
  // 检测数据的终极方法
  let res = Object.prototype.toString.call(target);
  switch (res) {
    case "[object Null]":
      result = target;
      break;
    case "[object Object]":
      result = {}
      for (let i in target) {
        result[i] = target[i]
      }
      break;
    case "[object Array]":
      result = []
      for (let i in target) {
        result.push(deepClone(target[i]))
      }
      break;
    case "[object RegExp]":
      result = target;
      break;
  }
  return result;
}

let a = deepClone({
  name: 1,
  data: null,
  a: {
    b: {
      c: {
        val: 'hello world'
      }
    }
  },
  reg: /\.js$/
})

console.log(a, 'a')
